#ifndef __MSG_HPP__
#define __MSG_HPP__
#include <memory>
#include <mutex>
#include <map>
#include <queue>
#include <msg.hpp>
#include <cmodule.hpp>
#include <shared_mutex>

using namespace std;

class CModule_Mgr{
public:
    CModule_Mgr();
    virtual ~CModule_Mgr();
    static shared_ptr<CModule_Mgr> getInstance();
    static void destoryInstance(CModule_Mgr* x);


    void send_msg(int srcId,CMsg_Ptr pMsg);
    CMsg_Ptr get_msg(int dstId);

    void reg_module(int moduleId,CModule_Ptr pModule);
    CModule_Ptr get_module(int moduleId);

private:
    static shared_ptr<CModule_Mgr>      pCMsg_Mgr;
    static shared_ptr<mutex>            m_mutex;
    map<int,CModule_Ptr>                m_modules;
    
    mutex                               m_moduleRwMutex;
};

typedef shared_ptr<CModule_Mgr> CModule_Mgr_Ptr;

#endif